
function $id(id){
    return document.getElementById(id);
}


// 封装一个基础的ajax请求的函数
/**
 * 一个ajax请求的函数
 * @param o 一个请求参数的对象
 * {
 *  async: false
 *  type: GET/POST,
 *  url: url,
 *  data: "key=value&key=value",
 *  success:function(res){
 *      请求成功的函数
 *      res就是响应的结果
 *  },
 *  error:function(e){
 *
 *  }
 * }
 */
let qdAjax=function(o){
    // 创建一个请求对象 因为ajax不是浏览器完成请求的。
    var  httpRequest = undefined; // 申明请求对象
    // 在不同的浏览器中创建XMLHttpRequest对象
    if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ...
        // 现在大部分的浏览器都是直接支持XMLHttpRequest
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE 6 and older
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 同步异步的问题
    let async = true;
    if(o && o.async!=undefined){
        async = o.async;
    }

    let method = o && o.type?o.type:"GET";
    // 设置回调函数
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState == 4 ){
            if(httpRequest.status == 200){
                // 调用你提供的响应正常的回调函数
                if(o && o.success){
                    o.success(httpRequest.responseText);
                }
            }else{
                if(o && o.error){
                    o.error(httpRequest.errorDetail);
                }
            }
        }
    }
    let reqUrl = o && o.url ? o.url :"";
    let param = null;
    // 判断请求方法
    if("GET" == method.toUpperCase()){
        if(reqUrl.indexOf("?")!=-1){
            if(o && o.data){
                reqUrl += "&"+o.data;
            }
        }else{
            if(o && o.data){
                reqUrl += "?"+o.data;
            }
        }
    }else{
        if(o && o.data){
            param = o.data;
        }
    }
    httpRequest.open(method,reqUrl,async);
    if("POST" == method.toUpperCase()){
        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }
    httpRequest.send(param);
}




/**
 * jsonp跨域请求
 * param o  
 * {
 *  url:xxxx,   // url中必须有回调函数的参数名
 *  data:xxxx,
 *  success:function(res){}
 * }
 */
function qdJsonp(o){
    if(o==undefined || o.url==undefined){
        return;
    }
    // 定义变量接收响应的数据
    let resData = undefined;// 保存请求之后得到的数据
    //定义一个函数
    // 生成一个函数的名字
    let fnName = "qd" + (new Date().getTime());
    // 这个函数必须是全局的
    window[fnName]=function(d){
        resData = d;// 调用传入的回调函数
        o.success(resData);
    }
    // 拼接一个url //  ajax?callback=?
    let url = o.url;
    // 解析其中的
    let index = url.indexOf("?");
    let param = url.substring(index + 1);
    param = param.replace("?",fnName);
    url = url.substring(0,index+1)+param; // ajax?callback=qd6354613213
    // 拼接data
    if(o.data){
        url += "&"+o.data;
    }
    // 动态的生成一个script标签
    let scriptTag = document.createElement("script");
    scriptTag.src=url;
    // 将script标签加入body
    document.body.appendChild(scriptTag);// 一旦加入，就开始请求
    
}